package com.hkts.naturalgas.datahandler.utils;

import com.hkts.naturalgas.datahandler.constance.EnviromentConstance;
import com.hkts.naturalgas.datahandler.vo.AdjustmentVo;
import com.hkts.naturalgas.datahandler.vo.SimulationDataVo;

/**
 * @ClassNameGetRandomUtils
 * @Description  获取随机数工具类
 * @Author yck
 * @Date2021-10-11 14:24
 * @Version V1.0
 **/
public class GetRandomUtils {
    /** 功能描述:
    *燃烧架移动随机数
    * @return: float
    * @Author: 杨春科
    * @Date: 2021-10-11 14:28
    * @Description //TODO
    */
    public static float getOffsetData(float max,float min){
        int random = (int) (Math.random()*(max*100-min*100)+min*100);
        return random/100f;
    }
    /** 功能描述:
     *燃烧架移动随机数
     * @return: float
     * @Author: 杨春科
     * @Date: 2021-10-11 14:28
     * @Description //TODO
     */
    public static float getMovingFrameTime(){
       int random = (int) (Math.random()*(13-7)+7);
        //int random = (int) (Math.random()*(5-2)+2);
        float value=(float) random/100;
        return value;
    }
    /** 功能描述:
     *獲取溫度下降讀書/每分鐘下降1度、随机下降
     * @return: float
     * @Author: 杨春科
     * @Date: 2021-10-11 14:28
     * @Description //TODO
     */
    public static float getDownTemperature(){
        int random = (int) (Math.random()*(60-1)+1);
        if(random==20){
            return 1;
        }
        return 0;
    }
    /** 功能描述:
     *判断是否进位
     * @return: float
     * @Author: 杨春科
     * @Date: 2021-10-11 14:28
     * @Description //TODO
     */
    public static float getWhetherCarry(Float rateSeconds){
        int i = rateSeconds.intValue();
        float decimal=rateSeconds-i;
        int random = (int) (Math.random()*(10000-0)+0);
        if(random<decimal*10000){
            return i+1;
        }
        return i;
    }

    public static float getWhetherCarry(float coefficient,Float rateSeconds){
        int i = rateSeconds.intValue();
        float decimal=rateSeconds-i;
        float random =coefficient* (float) (Math.random()*(10000-0)+0);
        if(random<decimal*10000){
            return i+1;
        }
        return i;
    }
   //根据条件 判断限制速率
    public static float getWhetherCarry(AdjustmentVo vo, SimulationDataVo simulationData) {

        //首先判断时间是否过了80%  中间火道
        if(simulationData.getType().equals(EnviromentConstance.IS_RS)){

            if ((float) simulationData.getCurrentSeconds() / (float) simulationData.getTotalSeconds() > 0.8 && vo.getItemIndex() != 0 && vo.getItemIndex() != vo.getItemNum() - 1) {
                //当前节点为最后一节点时
                if (simulationData.getNextTemperature() == null) {
                    return getWhetherCarry(simulationData.getRateSection());
                    //当前值比目标值小20
                } else if (vo.getLastRowValue() < simulationData.getNextTemperature() - 20) {
                    return getWhetherCarry(2, simulationData.getRateSection());
                } else if (vo.getLastRowValue() >= simulationData.getNextTemperature() - 20 && vo.getLastRowValue() <= simulationData.getNextTemperature()) {
                    return getWhetherCarry(1, simulationData.getRateSection());
                } else if (vo.getLastRowValue() >= simulationData.getNextTemperature() && vo.getLastRowValue() <= simulationData.getNextTemperature() - 20) {
                    return getWhetherCarry(0.5f, simulationData.getRateSection());
                } else if (vo.getLastRowValue() >= simulationData.getNextTemperature() + 20) {
                    return -getWhetherCarry(1, simulationData.getRateSection());
                }
                //首先判断时间是否过了80%  两边的火道
            } else if ((float) simulationData.getCurrentSeconds() / (float) simulationData.getTotalSeconds() > 0.8 && (vo.getItemIndex() == 0 || vo.getItemIndex() == vo.getItemNum() - 1)) {
                if (simulationData.getNextTemperature() == null) {
                    return getWhetherCarry(simulationData.getRateSection());
                    //当前值比目标值小20
                } else if (vo.getLastRowValue() < simulationData.getNextTemperature() - 80) {
                    return getWhetherCarry(2, simulationData.getRateSection());
                } else if (vo.getLastRowValue() >= simulationData.getNextTemperature() - 80 && vo.getLastRowValue() <= simulationData.getNextTemperature() - 30) {
                    return getWhetherCarry(1, simulationData.getRateSection());
                } else if (vo.getLastRowValue() >= simulationData.getNextTemperature() - 30) {
                    return getWhetherCarry(0.5f, simulationData.getRateSection());
                }
            } else {
                if (simulationData.getNextTemperature() == null) {
                    return getWhetherCarry(simulationData.getRateSection());
                } else if (vo.getLastRowValue() >= simulationData.getNextTemperature()) {
                    return getWhetherCarry(0.5f, simulationData.getRateSection());
                } else {
                    return getWhetherCarry(simulationData.getRateSection());
                }
            }
        }

        return getWhetherCarry(simulationData.getRateSection());
    }

    /** 功能描述:
     *
     * @return: float
     * @Author: 杨春科
     * @Date: 2021-10-11 14:28
     * @Description //随机生成 -1 0 1 三个随机数
     */
    public static int getRandom(){
        int random = (int) (Math.random()*(100-1)+1);
        if(random%10==0){
            return -1;
        }else if(random%10==1){
            return 1;
        }else{
            return 0;
        }
    }
  /** 功能描述:
  *控制是否
  * @return:
  * @Author: 杨春科
  * @Date: 2021-10-31 15:52
  * @Description //TODO
  */
  public static void main(String[] args) {
      System.out.println(getOffsetData(1,0));
  }
}
